home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / comm / bytecomm.zip / COMM.BAS next >
BASIC Source File  |  1991-07-19  |  3KB  |  118 lines

  1. REM     A *very* simple communications program in interpreted Basic.
  2. REM     Receives files via XMODEM.
  3. REM
  4. 10  CLS
  5. 20  DEFINT A-Z : KEY OFF
  6. 30  FALSE=0
  7. 40  TRUE=1
  8. 50  XOFF$=CHR$(19)
  9. 60  XON$=CHR$(17)
  10. 70  LF$=CHR$(10)
  11. 80  BKSPC$=CHR$(8)
  12. 90  CTRLR$=CHR$(18)
  13. 100  CTRLZ$=CHR$(26):CTRLX$=CHR$(24)
  14. 110  EOT$=CHR$(4):NAK$=CHR$(21):ACK$=CHR$(6):SOH$=CHR$(1)
  15. 120  OPEN "COM1:1200,N,8,1" AS 1
  16. 130  PRINT "A simple, XMODEM-capable communications program"
  17. 140  PRINT
  18. 150 PRINT "Press Ctrl-R when instructed to start an XMODEM receive operation."
  19. 160 PRINT "Press Ctrl-Z to end the program."
  20. 170 PRINT
  21. 180 INPUT "Want the modem to dial the number? (Y or N) ", DIAL$
  22. 190 IF DIAL$ = "y" OR DIAL$ = "Y" THEN GOTO 210
  23. 200 GOTO 260
  24. 210 INPUT "Telephone number to dial? ", PHONE$
  25. 220 INPUT "Touch-tone or rotary dial? (T or R) ",ROTARY$
  26. 230 PREFIX$ = "ATD"
  27. 240 IF ROTARY$ = "T" OR ROTARY$ = "t" THEN PREFIX$ = "ATDT"
  28. 250 PRINT #1, PREFIX$+PHONE$
  29. 260 LOCATE ,,1
  30. 270 B$=INKEY$:IF B$="" THEN GOTO 320
  31. 280 IF LEN(B$)<>1 THEN GOTO 320
  32. 290 IF B$ = CTRLR$ THEN GOTO 590
  33. 300 IF B$ = CTRLZ$ THEN GOTO 510
  34. 310 PRINT #1,B$;
  35. 320 IF EOF(1) THEN 260
  36. 330 IF LOC(1)>128 THEN PAUSE=TRUE:PRINT#1,XOFF$;
  37. 340 ON ERROR GOTO 370
  38. 350 A$=INPUT$(LOC(1),#1)
  39. 360 GOTO 380
  40. 370 RESUME
  41. 380 ON ERROR GOTO 0
  42. 390 FOR I=1 TO LEN(A$)
  43. 400     C$=MID$(A$,I,1)
  44. 420     IF C$<>BKSPC$ THEN GOTO 450
  45. 430     IF POS(0)=1 THEN GOTO 470
  46. 440     LOCATE ,POS(0)-1,1:PRINT " ";:LOCATE ,POS(0)-1,1:GOTO 470
  47. 450     IF ASC(C$)>127 THEN C$=CHR$(ASC(C$)-128)
  48. 460     IF C$<>LF$ THEN PRINT C$;
  49. 470     NEXT I
  50. 480 IF LOC(1)>0 THEN 260
  51. 490 IF PAUSE THEN PAUSE=FALSE:PRINT#1,XON$;
  52. 500 GOTO 260
  53. 510 REM         End the program.
  54. 520 PRINT
  55. 530 INPUT "Are you sure you want to quit? (Y or N) ", C$
  56. 540 IF C$ = "y" OR C$ = "Y" THEN GOTO 570
  57. 550 PRINT
  58. 560 GOTO 320
  59. 570 CLOSE
  60. 580 END
  61. 590 REM        Do an XMODEM receive.
  62. 600 INPUT "Filename to create on the PC? ", FIL$
  63. 610 IF FIL$ = "" THEN GOTO 740
  64. 620 OPEN FIL$ AS #2 LEN=128
  65. 630 FIELD 2, 128 AS DBLOCK$
  66. 640 PRINT #1, NAK$;
  67. 650 A$="":BLKCNT=1:BCOUNT=1:BLOCK$=""
  68. 660 WHILE BLOCK$ <> EOT$ AND ABORT <> TRUE
  69. 670       BLOCK$=""
  70. 680       GOSUB 790
  71. 690       WEND
  72. 700 IF ABORT = TRUE THEN GOTO 750
  73. 710 PRINT
  74. 720 PRINT "File ";FIL$;" has been received."
  75. 730 PRINT
  76. 740 GOTO 260
  77. 750 PRINT
  78. 760 PRINT "Reception of ";FIL$;" cancelled."
  79. 770 PRINT
  80. 780 GOTO 740
  81. 790 REM
  82. 800 B$=INKEY$:IF B$="" THEN GOTO 850
  83. 810 IF B$<>CTRLX$ THEN GOTO 850
  84. 820 PRINT #1,CTRLX$;CTRLX$;
  85. 830 ABORT=TRUE
  86. 840 GOTO 1060
  87. 850 IF EOF(1) THEN GOTO 790
  88. 860 A$=INPUT$(LOC(1),#1)
  89. 870 BLOCK$=BLOCK$+A$
  90. 880 IF LEN(BLOCK$)=1 AND BLOCK$=EOT$ THEN GOTO 1110
  91. 890 IF LEN(BLOCK$) < 132 THEN GOTO 790
  92. 900 IF LEN(BLOCK$) <> 132 THEN GOTO 1070
  93. 910 IF LEFT$(BLOCK$, 1) <> SOH$ THEN GOTO 1070
  94. 920 IF ASC(MID$(BLOCK$, 2, 1)) <> BLKCNT THEN GOTO 1070
  95. 930 D$=MID$(BLOCK$,4,128)
  96. 940 CHKSUM=ASC(MID$(BLOCK$,132,1))
  97. 950 CNUM=0
  98. 960 FOR I=1 TO 128
  99. 970     CNUM=CNUM+ASC(MID$(D$,I,1))
  100. 980     NEXT I
  101. 990 IF (CNUM AND 255) <> CHKSUM THEN GOTO 1070
  102. 1000 PRINT #1, ACK$;
  103. 1010 PRINT "Block ";BCOUNT; " received ok."
  104. 1020 LSET DBLOCK$=D$
  105. 1030 PUT #2
  106. 1040 BLKCNT = 255 AND (BLKCNT + 1)
  107. 1050 BCOUNT = BCOUNT + 1
  108. 1060 RETURN
  109. 1070 PRINT #1, NAK$;
  110. 1080 PRINT "Error occurred in block "; BCOUNT; ".  Correcting for it."
  111. 1090 BLOCK$=""
  112. 1100 GOTO 790
  113. 1110 CLOSE #2
  114. 1120 A$=EOT$
  115. 1130 PRINT #1, ACK$;
  116. 1140 GOTO 1060
  117.  
  118.